C++ 범위 기반 for문

C/C++

Posted by kwon on 2020-01-19

범위 기반 for문 (range-based for statement)

일반적인 for문은 다음과 같은 형태이다.

1
2
3
4
5
6
7
const int n = 10;
int arr[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

for(int i = 0; i < n; i++)
{
cout << arr[i] << endl;
}

하지만 C++ 11에서는 범위기반 for문 이라는 새로운 형태의 루프를 도입하여 더 간결하게 배열 등의 모든 요소를 반복하는 방법을 제공한다.

범위 기반 for문의 기본 문법은 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for(element_declaration : array)
statement;

// 위의 기본 for문을 범위 기반 for문으로 표현하면 다음과 같다.

const int n = 10;
int arr[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

for(int x : arr)
{
cout << x << endl;
}

// 아래는 auto키워드를 이용하여 자동으로 적절한 자료형을 지정함.
for(auto x : arr)
{
cout << x << endl;
}

위와 같이 일반 for문을 간단하게 표현할 수 있다. 위의 방식들은 각 원소의 참조를 x에 값이 복사되어 사용되기 때문에 원본이 훼손되지는 않지만 원소를 수정할 수 없다. 또한 복사하는데 비용도 발생한다.

1
2
3
4
5
6
7
8
9
10
11
// 아래와 같이 사용하면 arr의 모든 원소는 10으로 변경된다.
for(auto& x : arr)
{
x = 10;
}

// const로 지정하면 원소를 복사하지 않고 원본도 훼손되지 않기 때문에 자료의 안전성을 갖춘다.
for(const auto& x : arr)
{
cout << x << endl;
}

참조
https://docs.microsoft.com/ko-kr/cpp/cpp/range-based-for-statement-cpp?view=vs-2019
https://boycoding.tistory.com/210
https://blockdmask.tistory.com/319